export type FormLayout = 'horizontal' | 'vertical';
export type ButtonType =
  | 'dashed'
  | 'default'
  | 'ghost'
  | 'link'
  | 'primary'
  | 'text';

export type BtnFunctionType =
  | 'add'
  | 'addChild'
  | 'batchDel'
  | 'collapseAll'
  | 'del'
  | 'edit'
  | 'expandAll'
  | 'more';
export type ButtonSize = 'large' | 'middle' | 'small';

/** 定义基础类型 */
export namespace Types {
  /** 按钮配置项 */
  export interface BaseButton {
    // 按钮类型
    type?: ButtonType;
    // 按钮文本
    text?: string;
    // 按钮样式Class
    class?: string;
    // 设置危险按钮
    danger?: boolean;
    // 设置按钮大小
    size?: ButtonSize;
    // 按钮方法
    handlerFun?: string;
    // 按钮方法名称
    handlerFunName?: string;
    // 操作方式: pop气泡确认框 drop下拉菜单 只针对于行内操作按钮
    handlerWay?: 'drop' | 'pop';
    // 按钮功能类型
    btnFunctionType?: BtnFunctionType;
    // 按钮权限字符 如：权限字符为：sys:user:add, 只需要填写add
    permSuffix?: string;
    child: [];
  }
  // 表单基础配置
  export interface BaseForm {
    // 表单项布局
    layout?: FormLayout;
    // 表单栅格布局
    wrapperClass?: string;
    // 是否显示展开/折叠
    showCollapseButton?: boolean;
    // 操作按钮是否反转（提交按钮前置）
    actionButtonsReverse?: boolean;
    // 是否显示默认操作按钮
    showDefaultActions?: boolean;
    // 是否在字段值改变时提交表单
    submitOnChange?: boolean;
    // 是否在回车时提交表单
    submitOnEnter?: boolean;
    // 表单项通用后备配置，当子项目没配置时使用这里的配置，子项目配置优先级高于此配置
    commonConfig?: {
      // 在Label后显示一个冒号
      colon?: boolean;
      // 所有表单项的props
      componentProps?: {
        class?: string;
      };
      // 表单项的label宽度
      labelWidth?: number;
    };
  }
  // 表单组件配置项
  export interface BaseFormComponent {
    /** 组件 */
    component: string;
    /** 组件参数 */
    componentProps?: {
      // 提示
      placeholder: string;
    };
    /** 默认值 */
    defaultValue?: any;
    /** 依赖 */
    dependencies?: any;
    /** 描述 */
    description?: string;
    /** 字段名 */
    fieldName: string;
    /** 帮助信息 */
    help?: string;
    /** 表单项 */
    label?: string;
    // 自定义组件内部渲染
    renderComponentContent?: any;
    /** 字段规则 */
    rules?: any;
    /** 后缀 */
    suffix?: any;
  }
  // 表格基础配置
  export interface BaseTable {
    // 列标题
    title: string;
    // 列字段名
    field: string;
    // left（左对齐）, center（居中对齐）, right（右对齐）
    align: 'center' | 'left' | 'right';
    // 类型: seq序号 checkbox复选框 radio单选框 expand展开行
    type?: 'checkbox' | 'expand' | 'radio' | 'seq';
    // 列宽度
    width?: number | string;
    // 默认是否显示
    visible: boolean;
    // 将列固定在左侧或者右侧 left（冻结左侧）, right（冻结右侧）
    fixed: 'left' | 'right';
    // 插槽
    slots: {
      // 插槽名称
      default: string;
    };
  }
}
